package com.bitoon.basketdudes.web.jpa;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

@Entity
@Table(name = "temporada", schema = "basket")
@NamedQueries({
    /*
    @NamedQuery(name = "Temporada.findAll", query = "SELECT t FROM Temporada t"),
    @NamedQuery(name = "Temporada.findById", query = "SELECT t FROM Temporada t WHERE t.id = :id"),
    @NamedQuery(name = "Temporada.findByEdicion", query = "SELECT t FROM Temporada t WHERE t.edicion = :edicion"),
    @NamedQuery(name = "Temporada.findByMaxEquipos", query = "SELECT t FROM Temporada t WHERE t.maxEquipos = :maxEquipos"),
    @NamedQuery(name = "Temporada.findByNivelIni", query = "SELECT t FROM Temporada t WHERE t.nivelIni = :nivelIni"),
    @NamedQuery(name = "Temporada.findByNivelFin", query = "SELECT t FROM Temporada t WHERE t.nivelFin = :nivelFin"),
    @NamedQuery(name = "Temporada.findByFrecuencia", query = "SELECT t FROM Temporada t WHERE t.frecuencia = :frecuencia"),
    @NamedQuery(name = "Temporada.findByDescripcion", query = "SELECT t FROM Temporada t WHERE t.descripcion = :descripcion"),
    @NamedQuery(name = "Temporada.findByTipo", query = "SELECT t FROM Temporada t WHERE t.tipo = :tipo"),
    @NamedQuery(name = "Temporada.findByEstado", query = "SELECT t FROM Temporada t WHERE t.estado = :estado"),
    @NamedQuery(name = "Temporada.findByPrivada", query = "SELECT t FROM Temporada t WHERE t.privada = :privada"),
    @NamedQuery(name = "Temporada.findByPassword", query = "SELECT t FROM Temporada t WHERE t.password = :password"),
    @NamedQuery(name = "Temporada.findByJornadas", query = "SELECT t FROM Temporada t WHERE t.jornadas = :jornadas"),
    @NamedQuery(name = "Temporada.findByJornadaActual", query = "SELECT t FROM Temporada t WHERE t.jornadaActual = :jornadaActual"),
    @NamedQuery(name = "Temporada.findByFInicio", query = "SELECT t FROM Temporada t WHERE t.fInicio = :fInicio"),
    @NamedQuery(name = "Temporada.findByEquipos", query = "SELECT t FROM Temporada t WHERE t.equipos = :equipos"),
    @NamedQuery(name = "Temporada.findByTiempoCuarto", query = "SELECT t FROM Temporada t WHERE t.tiempoCuarto = :tiempoCuarto"),
    @NamedQuery(name = "Temporada.findByCartas", query = "SELECT t FROM Temporada t WHERE t.cartas = :cartas"),
    @NamedQuery(name = "Temporada.findByTalentos", query = "SELECT t FROM Temporada t WHERE t.talentos = :talentos"),
    @NamedQuery(name = "Temporada.findByFFin", query = "SELECT t FROM Temporada t WHERE t.fFin = :fFin"),
    @NamedQuery(name = "Temporada.findByZonaId", query = "SELECT t FROM Temporada t WHERE t.zonaId = :zonaId"),
     *
     */
    @NamedQuery(name = "Temporada.findTemporadaActivaByTorneoId",
        query = "SELECT t FROM Temporada t WHERE t.torneo.id = :id"),
    @NamedQuery(name = "Temporada.findById", query = "SELECT t FROM Temporada t WHERE t.id = :id"),
    @NamedQuery(name = "Temporada.findTemporadaActivaByTorneoUrl",
        query = "SELECT t FROM Temporada t WHERE t.torneo.nombreUrl = :nombre ORDER BY t.edicion DESC"),
    @NamedQuery(name = "Temporada.findTemporadaActivaByTorneoUrlPassword",
        query = "SELECT t FROM Temporada t WHERE t.torneo.nombreUrl = :nombre "
        + "AND t.password = :password ORDER BY t.edicion DESC"),
    @NamedQuery(name = "Temporada.findActivasByUsuarioId",
        query = "SELECT t FROM Temporada t WHERE t.torneo.usuario.id = :idUsuario AND (t.estado = 0 OR t.estado = 1 OR t.estado = 2)")
})
public class Temporada implements Serializable {
    private static final long serialVersionUID = 1L;

    // Estados de TEMPORADA

    public static final int ESTADO_CREADA_Y_NO_EMPEZADA = 1;
    public static final int ESTADO_CREADA_Y_EMPEZADA = 2;
    public static final int ESTADO_FINALIZADA = 3;

    @Id
    @Basic(optional = false)
    @Column(name = "id")
    @SequenceGenerator(name="temporada_id_generator", sequenceName="temporada_id_seq", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="temporada_id_generator")
    private Integer id;
    @Basic(optional = false)
    @Column(name = "edicion")
    private short edicion;
    @Basic(optional = false)
    @Column(name = "max_equipos")
    private int maxEquipos;
    @Basic(optional = false)
    @Column(name = "nivel_ini")
    private short nivelIni;
    @Basic(optional = false)
    @Column(name = "nivel_fin")
    private short nivelFin;
    @Basic(optional = false)
    @Column(name = "frecuencia")
    private short frecuencia;
    @Column(name = "descripcion")
    private String descripcion;
    @Column(name = "tipo")
    private Short tipo;
    @Column(name = "estado")
    private Short estado;
    @Basic(optional = false)
    @Column(name = "privada")
    private short privada;
    @Column(name = "password")
    private String password;
    @Column(name = "jornadas")
    private Short jornadas;
    @Column(name = "jornada_actual")
    private Short jornadaActual;
    @Column(name = "f_inicio")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fInicio;
    @Basic(optional = false)
    @Column(name = "equipos")
    private short equipos;
    @Column(name = "tiempo_cuarto")
    private Short tiempoCuarto;
    @Column(name = "cartas")
    private Short cartas;
    @Column(name = "talentos")
    private Short talentos;
    @Column(name = "f_fin")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fFin;
    @Column(name = "f_fin_prevista")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fFinPrevista;
    @Basic(optional = false)
    @Column(name = "zona_id")
    private short zonaId;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "temporada")
    private List<Jornada> jornadaList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "temporada")
    private List<Calendario> calendarioList;
    @JoinColumn(name = "torneo_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Torneo torneo;

    @OneToMany(fetch=FetchType.EAGER, mappedBy = "temporada")
    private List<Participe> participeList;

    public Temporada() {
    }

    public Temporada(Integer id) {
        this.id = id;
    }

    public Temporada(Integer id, short edicion, short maxEquipos, short nivelIni, short nivelFin, short frecuencia, short privada, short equipos, short zonaId) {
        this.id = id;
        this.edicion = edicion;
        this.maxEquipos = maxEquipos;
        this.nivelIni = nivelIni;
        this.nivelFin = nivelFin;
        this.frecuencia = frecuencia;
        this.privada = privada;
        this.equipos = equipos;
        this.zonaId = zonaId;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public short getEdicion() {
        return edicion;
    }

    public void setEdicion(short edicion) {
        this.edicion = edicion;
    }

    public int getMaxEquipos() {
        return maxEquipos;
    }

    public void setMaxEquipos(short maxEquipos) {
        this.maxEquipos = maxEquipos;
    }

    public short getNivelIni() {
        return nivelIni;
    }

    public void setNivelIni(short nivelIni) {
        this.nivelIni = nivelIni;
    }

    public short getNivelFin() {
        return nivelFin;
    }

    public void setNivelFin(short nivelFin) {
        this.nivelFin = nivelFin;
    }

    public short getFrecuencia() {
        return frecuencia;
    }

    public void setFrecuencia(short frecuencia) {
        this.frecuencia = frecuencia;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Short getTipo() {
        return tipo;
    }

    public void setTipo(Short tipo) {
        this.tipo = tipo;
    }

    public Short getEstado() {
        return estado;
    }

    public void setEstado(Short estado) {
        this.estado = estado;
    }

    public short getPrivada() {
        return privada;
    }

    public void setPrivada(short privada) {
        this.privada = privada;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Short getJornadas() {
        return jornadas;
    }

    public void setJornadas(Short jornadas) {
        this.jornadas = jornadas;
    }

    public Short getJornadaActual() {
        return jornadaActual;
    }

    public void setJornadaActual(Short jornadaActual) {
        this.jornadaActual = jornadaActual;
    }

    public Date getFInicio() {
        return fInicio;
    }

    public void setFInicio(Date fInicio) {
        this.fInicio = fInicio;
    }

    public short getEquipos() {
        return equipos;
    }

    public void setEquipos(short equipos) {
        this.equipos = equipos;
    }

    public Short getTiempoCuarto() {
        return tiempoCuarto;
    }

    public void setTiempoCuarto(Short tiempoCuarto) {
        this.tiempoCuarto = tiempoCuarto;
    }

    public Short getCartas() {
        return cartas;
    }

    public void setCartas(Short cartas) {
        this.cartas = cartas;
    }

    public Short getTalentos() {
        return talentos;
    }

    public void setTalentos(Short talentos) {
        this.talentos = talentos;
    }

    public Date getFFin() {
        return fFin;
    }

    public void setFFin(Date fFin) {
        this.fFin = fFin;
    }

    public short getZonaId() {
        return zonaId;
    }

    public void setZonaId(short zonaId) {
        this.zonaId = zonaId;
    }

    public List<Jornada> getJornadaList() {
        return jornadaList;
    }

    public void setJornadaList(List<Jornada> jornadaList) {
        this.jornadaList = jornadaList;
    }

    public List<Calendario> getCalendarioList() {
        return calendarioList;
    }

    public void setCalendarioList(List<Calendario> calendarioList) {
        this.calendarioList = calendarioList;
    }

    public Torneo getTorneo() {
        return torneo;
    }

    public void setTorneo(Torneo torneoId) {
        this.torneo = torneoId;
    }

    public List<Participe> getParticipeList() {
        return participeList;
    }

    public void setParticipeList(List<Participe> participeList) {
        this.participeList = participeList;
    }



    

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Temporada)) {
            return false;
        }
        Temporada other = (Temporada) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.bitoon.basketdudes.jpa.Temporada[id=" + id + "]";
    }

    public Date getfFinPrevista() {
        return fFinPrevista;
    }

    public void setfFinPrevista(Date fFinPrevista) {
        this.fFinPrevista = fFinPrevista;
    }

}
